<?php

namespace app\admin\model\manufacture;

use think\Model;

class Stock extends Model
{
    // 表名
    protected $name = 'manufacture_stock';
    
    // 自动写入时间戳字段
    protected $autoWriteTimestamp = 'int';

    // 定义时间戳字段名
    protected $createTime = 'createtime';
    protected $updateTime = 'updatetime';
    
    // 追加属性
    protected $append = [
        'type_text'
    ];
    
    // 类型
    public function getTypeList()
    {
        return [
            'raw' => __('原材料'),
            'semi' => __('半成品'),
            'finished' => __('成品')
        ];
    }

    public function getTypeTextAttr($value, $data)
    {
        $value = $value ? $value : $data['type'];
        $list = $this->getTypeList();
        return isset($list[$value]) ? $list[$value] : '';
    }

    // 关联物料
    public function material()
    {
        return $this->belongsTo('Material', 'material_id', 'id');
    }

    // 关联仓库
    public function warehouse()
    {
        return $this->belongsTo('Warehouse', 'warehouse_id', 'id');
    }

    // 关联库存日志
    public function stockLogs()
    {
        return $this->hasMany('StockLog', 'stock_id', 'id');
    }

    // 获取库存预警状态
    public function getWarningStatusAttr($value, $data)
    {
        if ($data['quantity'] <= 0) {
            return 'empty'; // 无库存
        }
        
        $material = $this->material;
        if ($material && $material->min_stock > 0 && $data['quantity'] <= $material->min_stock) {
            return 'low'; // 库存不足
        }
        
        if ($material && $material->max_stock > 0 && $data['quantity'] >= $material->max_stock) {
            return 'high'; // 库存过高
        }
        
        return 'normal'; // 正常
    }

    // 获取库存预警文本
    public function getWarningStatusTextAttr($value, $data)
    {
        $status = $this->warning_status;
        switch ($status) {
            case 'empty':
                return '无库存';
            case 'low':
                return '库存不足';
            case 'high':
                return '库存过高';
            default:
                return '正常';
        }
    }

    // 获取库存预警颜色
    public function getWarningStatusColorAttr($value, $data)
    {
        $status = $this->warning_status;
        switch ($status) {
            case 'empty':
                return 'danger';
            case 'low':
                return 'warning';
            case 'high':
                return 'info';
            default:
                return 'success';
        }
    }
}
